package com.example.zluserservice.client;

import com.example.zluserservice.common.base.PageResponse;
import com.example.zluserservice.dto.request.RoleReqDTO;
import com.example.zluserservice.dto.response.RoleResDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author zhenliu（孙凌岳）
 * @Description 重构-拆分原来的权限客户端 权限服务-角色
 * @Date 2025/6/21 10:35
 * @Version 1.0
 */
@FeignClient(name = "zl-permission-service", path = "/permission/inner/role", contextId = "roleFeignClient")
public interface RoleFeignClient {
    /**
     * 分页查询角色信息
     * @param roleReqDTO
     * @param pageNum
     * @param pageSize
     * @return
     */
    @PostMapping("/page/{pageNum}/{pageSize}")
    PageResponse<RoleResDTO> findRolePage(
            @RequestBody RoleReqDTO roleReqDTO,
            @PathVariable("pageNum") int pageNum,
            @PathVariable("pageSize") int pageSize);

    /**
     * 初始化角色信息
     * @return
     */
    @PostMapping("/init-roles")
    List<RoleResDTO> initRoles();;

    /**
     *  查询用户对应角色
     * @param userId 查询条件
     * @return: List<Role>
     */
    @GetMapping("/find-role")
    List<RoleResDTO> findRoleResDTOListByUserId(@RequestParam("userId") Long userId);

    /**
     *  查询用户列表对应角色
     * @param userIds 查询条件
     * @return: List<Role>
     */
    @GetMapping("/find-roles")
    List<RoleResDTO> findRoleResDTOListInUserId(@RequestParam("userIds") List<Long> userIds);

    /**
     * 获取单个用户的角色标识
     * @param userId
     * @return
     */
    @GetMapping("/{userId}")
    String getUserRoleCode(@PathVariable("userId") Long userId);

    /**
     * 根据角色标识获取所有用户ID
     * @param roleCode
     * @return
     */
    @GetMapping("/id-list/{roleCode}")
    List<Long> getUserIdsByRoleCode(@PathVariable("roleCode") String roleCode);

    /**
     * 保存角色
     * @param roleReqDTO
     * @return
     */
    @PutMapping
    RoleResDTO createRole(@RequestBody RoleReqDTO roleReqDTO);

    /**
     * 修改用户
     * @param roleReqDTO
     * @return
     */
    @PutMapping("/update")
    Boolean updateRole(@RequestBody RoleReqDTO roleReqDTO);

    /**
     * 删除角色
     * @param roleId
     * @return
     */
    @DeleteMapping("/{roleId}")
    Boolean deleteRoleById(@PathVariable("roleId") Long roleId);

    /**
     * 注册流程-绑定默认角色
     * @param userId
     */
    @GetMapping("/default-role/{userId}")
    void bindDefaultRole(@PathVariable("userId") Long userId);

    /**
     * 测试rpc调用
     * @return
     */
    @GetMapping("/test")
    String testPermission();
}
